﻿#include "lvgl_temp.h"
#if USE_WIN == 0
#include "sht20.h"
#endif

__lvgl_temp_data lvgl_temp_data;

static void lvgl_temp_anim_select_start(int targetpos);
static void lvgl_temp_anim_out_start(int mode, int time);
static void lvgl_temp_anim_select_ready_cb(lv_anim_t *anim);

void lvgl_temp_task_cb(lv_task_t *t)
{

	static uint8_t mode = 0;
	static uint16_t t0 = 0;
	static uint16_t t1 = 0;
	static uint16_t t_total = 3;
#if USE_WIN == 0
	lvgl_temp_data.hour = system_data.RiQi_Data.shi;
	lvgl_temp_data.min = system_data.RiQi_Data.fen;

	lvgl_temp_data.temp = sht20_get_Tempreture();
	lvgl_temp_data.humi = sht20_get_Humidity();

#else

	if (++t0 >= 1)
	{
		t0 = 0;
		lvgl_temp_data.temp += 1;
		lvgl_temp_data.humi += 2;
	}

#endif
	if (mode == 0)
	{
		t_total = 40;
	}
	else
	{
		t_total = 3;
	}
	if (++t1 >= t_total)
	{
		t1 = 0;

		if (++mode > 3)
		{
			mode = 0;
		}
	}

	lvgl_temp_debug("温度:%0.2f 湿度:%0.2f", lvgl_temp_data.temp, lvgl_temp_data.humi);
	switch (mode)
	{
	case 0:
		sprintf(lvgl_temp_data.p_buf, "%02d:%02d %0.2f℃ %0.2f%%",
				lvgl_temp_data.hour,
				lvgl_temp_data.min,
				lvgl_temp_data.temp,
				lvgl_temp_data.humi);

		lv_img_set_src(lvgl_temp_data.image1, &img_0003);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
		lv_obj_set_hidden(lvgl_temp_data.image1,true);
		break;
	case 1:
		sprintf(lvgl_temp_data.p_buf, "%0.2f", lvgl_temp_data.temp);
		lv_img_set_src(lvgl_temp_data.image1, &img_0001);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
		lv_obj_set_hidden(lvgl_temp_data.image1,false);
		break;
	case 2:
		sprintf(lvgl_temp_data.p_buf, "%0.2f", lvgl_temp_data.humi);
		lv_img_set_src(lvgl_temp_data.image1, &img_0002);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
		lv_obj_set_hidden(lvgl_temp_data.image1,false);
		break;
	case 3:
		sprintf(lvgl_temp_data.p_buf, "%02d:%02d", lvgl_temp_data.hour, lvgl_temp_data.min);

		lv_img_set_src(lvgl_temp_data.image1, &img_0003);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
		lv_obj_set_hidden(lvgl_temp_data.image1,false);
		break;

	}

	lvgl_temp_set_temp(lvgl_temp_data.p_buf);
}
void lvgl_temp_close_task_cb(lv_task_t *t)
{
	static uint8_t cnt = 0;
	if (lvgl_temp_data.close_flag == true)
	{

		if (++cnt >= lvgl_temp_data.close_count)
		{
			cnt = 0;
			lvgl_temp_data.close_flag = false;
			lvgl_task_delete(&lvgl_temp_data.close_task);

			if (lvgl_temp_data.close_num == 0)
			{
				lvgl_temp_anim_out_start(0, 350);
			}
			else if (lvgl_temp_data.close_num == 1)
			{
				lvgl_temp_anim_out_start(0, 350);
			}
			else if (lvgl_temp_data.close_num == 2)
			{
				lvgl_temp_anim_out_start(0, 250);
			}
		}
	}
}

void lvgl_temp_anim_in_cb(void *arc, lv_anim_value_t v)
{
	lv_obj_set_y(arc, v);
}

void lvgl_temp_anim_in_ready_cb(lv_anim_t *anim)
{

	lvgl_temp_debug("---------anim in ready---------");

	lv_anim_del(&lvgl_temp_data.anim_in, NULL);

	lv_obj_set_pos(lvgl_temp_data.cont_main, 0, 0);

	lvgl_group_add_obj(&lvgl_temp_data.cont_main);
	lvgl_group_focus_obj(&lvgl_temp_data.cont_main);
}

void lvgl_temp_anim_in_start(int mode, int time)
{
#if LVGL_ANIM_SWITCH

	lvgl_temp_debug("---------anim in start---------");

	lv_anim_path_init(&lvgl_temp_data.anim_path_in);
	lv_anim_path_set_cb(&lvgl_temp_data.anim_path_in, lv_anim_path_ease_out);
	// lv_anim_path_linear线性动画
	// lv_anim_path_step最后一步更改
	// lv_anim_path_ease_in开头很慢
	// lv_anim_path_ease_out最后慢
	// lv_anim_path_ease_in_out在开始和结束时也很慢
	// lv_anim_path_overshoot超出最终值
	// lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）

	lv_anim_init(&lvgl_temp_data.anim_in);

	lv_anim_set_exec_cb(&lvgl_temp_data.anim_in, lvgl_temp_anim_in_cb);
	lv_anim_set_ready_cb(&lvgl_temp_data.anim_in, lvgl_temp_anim_in_ready_cb);
	lv_anim_set_values(&lvgl_temp_data.anim_in, lv_obj_get_y(lvgl_temp_data.cont_main), 0);
	lv_anim_set_time(&lvgl_temp_data.anim_in, 300);
	lv_anim_set_var(&lvgl_temp_data.anim_in, lvgl_temp_data.cont_main);

	lv_anim_set_path(&lvgl_temp_data.anim_in, &lvgl_temp_data.anim_path_in);
	lv_anim_start(&lvgl_temp_data.anim_in);

#else

	lvgl_temp_anim_in_ready_cb(NULL);

#endif
}

void lvgl_temp_anim_out_cb(void *arc, lv_anim_value_t v)
{
	lv_obj_set_y(arc, v);
}
void lvgl_temp_anim_out_ready_cb(lv_anim_t *anim)
{

	lvgl_temp_debug("---------anim out ready---------");

	lv_anim_del(&lvgl_temp_data.anim_out, NULL);
	lvgl_temp_close();
}

static void lvgl_temp_anim_out_start(int mode, int time)
{

	lvgl_group_remove_obj(&lvgl_temp_data.cont_main);

#if LVGL_ANIM_SWITCH

	lvgl_temp_debug("---------anim out start---------");

	lv_anim_path_init(&lvgl_temp_data.anim_path_out);
	lv_anim_path_set_cb(&lvgl_temp_data.anim_path_out, lv_anim_path_ease_in);
	// lv_anim_path_linear线性动画
	// lv_anim_path_step最后一步更改
	// lv_anim_path_ease_in开头很慢
	// lv_anim_path_ease_out最后慢
	// lv_anim_path_ease_in_out在开始和结束时也很慢
	// lv_anim_path_overshoot超出最终值
	// lv_anim_path_bounce从最终值反弹一点（就像撞墙一样）

	lv_anim_init(&lvgl_temp_data.anim_out);

	lv_anim_set_exec_cb(&lvgl_temp_data.anim_out, lvgl_temp_anim_out_cb);
	lv_anim_set_ready_cb(&lvgl_temp_data.anim_out, lvgl_temp_anim_out_ready_cb);
	lv_anim_set_values(&lvgl_temp_data.anim_out, lv_obj_get_y(lvgl_temp_data.cont_main), lv_obj_get_height(lv_scr_act()));
	lv_anim_set_time(&lvgl_temp_data.anim_out, time);
	lv_anim_set_var(&lvgl_temp_data.anim_out, lvgl_temp_data.cont_main);

	lv_anim_set_path(&lvgl_temp_data.anim_out, &lvgl_temp_data.anim_path_out);
	lv_anim_start(&lvgl_temp_data.anim_out);

#else

	lvgl_temp_anim_out_ready_cb(NULL);

#endif
}

void lvgl_temp_event_cb(struct _lv_obj_t *obj, lv_event_t event)
{
	if (obj == lvgl_temp_data.cont_main)
	{

		// lvgl_temp_debug("cb:%d", event);
		switch (event)
		{
		case LV_EVENT_KEY:

			switch (*(const uint32_t *)lv_event_get_data())
			{
			case LV_KEY_UP:
				lvgl_temp_debug("LV_KEY_UP");

				break;
			case LV_KEY_DOWN:
				lvgl_temp_debug("LV_KEY_DOWN");

				break;
			case LV_KEY_LEFT:
				lvgl_temp_debug("LV_KEY_LEFT");
				if (--lvgl_temp_data.style_num < 0)
				{
					lvgl_temp_data.style_num = 2;
				}

				lvgl_temp_data.close_flag = true;
				lvgl_temp_data.close_count = 1;
				lvgl_temp_data.close_num = 2;
				lvgl_task_create(&lvgl_temp_data.close_task, lvgl_temp_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

				// lvgl_temp_set_style(lvgl_temp_data.style_num);
				break;
			case LV_KEY_RIGHT:

				if (++lvgl_temp_data.style_num > 2)
				{
					lvgl_temp_data.style_num = 0;
				}
				lvgl_temp_data.close_flag = true;
				lvgl_temp_data.close_count = 1;
				lvgl_temp_data.close_num = 2;
				lvgl_task_create(&lvgl_temp_data.close_task, lvgl_temp_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

				// lvgl_temp_set_style(lvgl_temp_data.style_num);

				break;
			case LV_KEY_ESC:
				lvgl_temp_debug("LV_KEY_ESC");

				lvgl_temp_data.close_flag = true;
				lvgl_temp_data.close_count = 1;
				lvgl_temp_data.close_num = 0;
				lvgl_task_create(&lvgl_temp_data.close_task, lvgl_temp_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

				break;
			case LV_KEY_DEL:
				lvgl_temp_debug("LV_KEY_DEL");

				break;
			case LV_KEY_BACKSPACE:
				lvgl_temp_debug("LV_KEY_BACKSPACE");

				break;
			case LV_KEY_ENTER:
				lvgl_temp_debug("LV_KEY_ENTER");

				lvgl_temp_data.close_flag = true;
				lvgl_temp_data.close_count = 1;
				lvgl_temp_data.close_num = 1;
				lvgl_task_create(&lvgl_temp_data.close_task, lvgl_temp_close_task_cb, 10, LV_TASK_PRIO_HIGH, NULL);

				break;
			case LV_KEY_NEXT:
				lvgl_temp_debug("LV_KEY_NEXT");

				break;
			case LV_KEY_PREV:
				lvgl_temp_debug("LV_KEY_PREV");

				break;
			case LV_KEY_HOME:
				lvgl_temp_debug("LV_KEY_HOME");

				break;
			case LV_KEY_END:
				lvgl_temp_debug("LV_KEY_END");

				break;
			}

			break;

		case LV_EVENT_DELETE:

			lvgl_temp_data.cont_main = NULL;
			lvgl_temp_debug("delete win");
			break;

		case LV_EVENT_PRESSING: // 对象被持续按下

			break;
		case LV_EVENT_PRESSED: // 对象已被按下

			break;
		case LV_EVENT_DRAG_END: // 拖动结束后

			if (lv_obj_get_x(lvgl_temp_data.cont_main) != 0)
			{
				lv_obj_set_x(lvgl_temp_data.cont_main, 0);
			}

			if (lv_obj_get_y(lvgl_temp_data.cont_main) != 0)
			{
				lv_obj_set_y(lvgl_temp_data.cont_main, 0);
			}
			break;
		case LV_EVENT_RELEASED: // 按钮释放

		case LV_EVENT_LONG_PRESSED: // 按钮长按

			break;

		default:
			break;
		}
	}
}

void lvgl_temp_create(lv_obj_t *parent)
{
	if (lvgl_temp_data.cont_main == NULL)
	{

		//----创建容器----//
		lvgl_temp_data.cont_main = lv_cont_create(parent, NULL);

		lv_obj_set_size(lvgl_temp_data.cont_main, lv_obj_get_width(parent), lv_obj_get_height(parent));
		lv_obj_set_pos(lvgl_temp_data.cont_main, 0, -(lv_obj_get_height(parent)));

		lv_obj_set_click(lvgl_temp_data.cont_main, true);				// 启用 / 禁用可点击
		lv_obj_set_drag(lvgl_temp_data.cont_main, true);				// 启用/禁用对象可拖动
		lv_obj_set_drag_throw(lvgl_temp_data.cont_main, true);			// 启用/禁用拖动后是否有惯性移动
		lv_obj_set_drag_parent(lvgl_temp_data.cont_main, false);		// 启用 / 禁用父对象可拖动
		lv_obj_set_drag_dir(lvgl_temp_data.cont_main, LV_DRAG_DIR_HOR); // 设置拖动方向
		lv_obj_add_style(lvgl_temp_data.cont_main, LV_OBJ_PART_MAIN, &lvgl_style.cont_no_border);
		lv_obj_set_event_cb(lvgl_temp_data.cont_main, lvgl_temp_event_cb);
		//----创建容器----//

#if USE_WIN == 1

		lvgl_temp_data.sec = 21;
		lvgl_temp_data.min = 1;
		lvgl_temp_data.hour = 9;
		lvgl_temp_data.temp = 25.0;
		lvgl_temp_data.humi = 100.8;
#else

#endif

		lvgl_temp_data.label_time = lv_label_create(lvgl_temp_data.cont_main, NULL);
		lv_obj_set_pos(lvgl_temp_data.label_time, 0, 0);
		lv_label_set_long_mode(lvgl_temp_data.label_time, LV_LABEL_LONG_SROLL);
		lv_obj_set_size(lvgl_temp_data.label_time, lv_obj_get_width(lvgl_temp_data.cont_main), 120);
		lv_label_set_recolor(lvgl_temp_data.label_time, true);
		lv_label_set_align(lvgl_temp_data.label_time, LV_LABEL_ALIGN_CENTER);
		lv_label_set_recolor(lvgl_temp_data.label_time, true);
		lv_label_set_text(lvgl_temp_data.label_time, " ");
		lv_label_set_anim_speed(lvgl_temp_data.label_time, 60);
		lv_obj_add_style(lvgl_temp_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font80_white_bg);
		lv_obj_align(lvgl_temp_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

		lv_obj_add_style(lvgl_temp_data.label_time, LV_OBJ_PART_MAIN, &lvgl_style.font_clock_style2_white_bg);
		lv_obj_align(lvgl_temp_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);

		lvgl_temp_data.image1 = lv_img_create(lvgl_temp_data.cont_main, NULL);
		lv_img_set_src(lvgl_temp_data.image1, &img_0001);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
		lv_obj_set_hidden(lvgl_temp_data.image1,true);

		lv_img_set_src(lvgl_temp_data.image1, &img_0003);
		lv_obj_align(lvgl_temp_data.image1, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);

		sprintf(lvgl_temp_data.p_buf, "%02d:%02d", lvgl_temp_data.hour, lvgl_temp_data.min);
		lvgl_temp_set_temp(lvgl_temp_data.p_buf);

		lvgl_task_create(&lvgl_temp_data.task, lvgl_temp_task_cb, 1000, LV_TASK_PRIO_HIGH, NULL);

		lvgl_temp_debug("create win");
	}
	else
	{
		lvgl_temp_debug("show win");
	}
	lvgl_temp_set_style(1);
	lv_obj_move_background(lvgl_temp_data.cont_main);
	lvgl_set_obj_show(&lvgl_temp_data.cont_main);

	lvgl_temp_anim_in_start(0, 0);
}
void lvgl_temp_set_temp(char *data)
{
	lv_label_set_text(lvgl_temp_data.label_time, data);
	lv_obj_align(lvgl_temp_data.label_time, NULL, LV_ALIGN_CENTER, 0, 0);
}

void lvgl_temp_set_style(int data)
{
}

void lvgl_temp_hidden(void)
{
}

void lvgl_temp_close(void)
{
	lvgl_temp_debug("close");
	lvgl_group_remove_obj(&lvgl_temp_data.cont_main);

	lvgl_task_delete(&lvgl_temp_data.task);

	lvgl_obj_clean(&lvgl_temp_data.cont_main);
	lvgl_obj_del(&lvgl_temp_data.cont_main);

	if (lvgl_temp_data.close_num == 0)
	{
		lvgl_desktop_create(lv_scr_act());
	}
	else if (lvgl_temp_data.close_num == 1)
	{
		system_set_clock_style(0);
		lvgl_clock_create(lv_scr_act());
	}
	else if (lvgl_temp_data.close_num == 2)
	{
		lvgl_temp_create(lv_scr_act());
	}
}
